package cn.mujiankeji.mbrowser.界面.标签页.书签

import androidx.compose.runtime.mutableStateOf
import cn.mujiankeji.mbrowser.app.应用接口
import cn.mujiankeji.mbrowser.app.应用路由
import cn.mujiankeji.mbrowser.app.界面模块
import cn.mujiankeji.mbrowser.数据.数据库.AppDatabase
import cn.mujiankeji.mbrowser.数据.数据库.DBBookmark
import cn.mujiankeji.mbrowser.界面.框架.主视图.标签页状态
import kotlinx.coroutines.flow.MutableStateFlow

/**
 * 书签标签状态
 * 管理书签标签页的状态，包括当前显示的文件夹、书签列表等
 */
class 书签标签状态() : 标签页状态() {
    // 当前浏览的文件夹ID，0表示根目录
    val 当前文件夹ID = mutableStateOf(0L)
    
    // 当前文件夹的路径，用于显示导航栏
    val 当前路径 = mutableStateOf<List<DBBookmark>>(emptyList())
    
    // 搜索关键字
    val 搜索关键字 = mutableStateOf("")
    
    // 是否处于搜索模式
    val 是否搜索模式 = mutableStateOf(false)
    
    // 是否处于编辑模式
    val 是否编辑模式 = mutableStateOf(false)
    
    // 选中的书签/文件夹ID列表（用于批量操作）
    val 选中条目ID列表 = mutableStateOf<Set<Long>>(emptySet())
    
    init {
        // 初始化标题
        标题.value = "书签"
    }
    
    /**
     * 进入指定文件夹
     */
    fun 进入文件夹(文件夹: DBBookmark) {
        当前文件夹ID.value = 文件夹.id
        更新文件夹路径(文件夹)
    }
    
    /**
     * 返回上一级文件夹
     * @return 是否成功返回上一级（如果已经在根目录，则返回false）
     */
    fun 返回上级文件夹(): Boolean {
        if (当前文件夹ID.value == 0L) {
            return false
        }
        
        if (当前路径.value.isNotEmpty()) {
            val 父文件夹 = 当前路径.value.getOrNull(当前路径.value.size - 2)
            if (父文件夹 != null) {
                当前文件夹ID.value = 父文件夹.id
                当前路径.value = 当前路径.value.dropLast(1)
                return true
            }
        }
        
        // 如果路径信息不完整，直接返回根目录
        当前文件夹ID.value = 0L
        当前路径.value = emptyList()
        return true
    }
    
    /**
     * 更新当前文件夹路径
     */
    private fun 更新文件夹路径(当前文件夹: DBBookmark) {
        val 新路径 = 当前路径.value.toMutableList()
        // 检查是否已经在路径中
        val 索引 = 新路径.indexOfFirst { it.id == 当前文件夹.id }
        if (索引 >= 0) {
            // 如果已经在路径中，截断到该位置
            当前路径.value = 新路径.subList(0, 索引 + 1)
        } else {
            // 否则添加到路径末尾
            新路径.add(当前文件夹)
            当前路径.value = 新路径
        }
    }
    
    /**
     * 开始搜索
     */
    fun 开始搜索(关键字: String) {
        搜索关键字.value = 关键字
        是否搜索模式.value = 关键字.isNotEmpty()
    }
    
    /**
     * 取消搜索
     */
    fun 取消搜索() {
        搜索关键字.value = ""
        是否搜索模式.value = false
    }
    
    /**
     * 切换编辑模式
     */
    fun 切换编辑模式() {
        是否编辑模式.value = !是否编辑模式.value
        // 清空选中项
        if (!是否编辑模式.value) {
            选中条目ID列表.value = emptySet()
        }
    }
    
    /**
     * 选择或取消选择条目
     */
    fun 切换选择条目(id: Long) {
        val 当前选中 = 选中条目ID列表.value.toMutableSet()
        if (当前选中.contains(id)) {
            当前选中.remove(id)
        } else {
            当前选中.add(id)
        }
        选中条目ID列表.value = 当前选中
    }
    
    /**
     * 创建网页标签页访问指定URL
     */
    fun 打开网页(url: String) {
        应用路由.加载(url)
    }
} 